1. Field of the Invention
The present invention relates generally to computer operating systems, and more particularly to computer systems having multiple processors and operating systems supporting symmetric and asymmetric multiprocessing.
2. Description of Related Art
Many proprietary computer systems, including those comprising network elements such as servers, gateways, firewalls, etc., ship with processors and open operating systems for running applications on the processors such as the Linux operating system. Purchasers and users of such systems can then extend the functionality of such systems by writing and/or loading applications to run on the processor under the operating system.
Typically, the Linux kernel executes starting from the lowest memory address 0x00000000 on a PowerPC architecture. As more and more memory is needed for applications, it uses all the memory up to the physical end of memory to run both the Linux kernel and the user applications. Currently most operating systems, including the Linux kernel, do not support starting from a different address, say 0x40000000 (1 GB). However, it may be desirable in some circumstances to do so, for example to reserve the low address for some other purpose, or to provide some other external entity or processor with exclusive access to the low address.
Additionally, some types of processors include two or more processor cores. In a typical dual-core PowerPC system (e.g. Freescale's 8641 D's architecture), for example, Symmetric Multi Processing (“SMP”) Linux can be run to support two cores and to take advantage of the cores. This can enable faster processing of user applications, as well as allowing a higher number of applications to run than would otherwise be possible.
In an SMP architecture, both cores are managed by the SMP Linux kernel that decides which process gets to run on which processor core. Sometimes it may not be possible to fully take advantage of the dual cores due to the nature of the application. Consequently, the alternative Asymmetric Multi Processing (ASMP) was developed, where both cores act as two individual processors, without any relation with each other. Each core runs its own operating system and user applications. This allows users to use two entirely separate processors, even though they are actually included in one dual core system. Any process that needs to communicate with a process running on the other core needs to go through some external mechanisms such as shared memory or sockets.
The FreeScale PowerPC architecture considers the low addresses for all standard exceptions. In order to support exceptions separately for each processor and to run a separate operating system, some processor suppliers developed a mechanism called “Low Memory Offset Mode.” (See section 1.3.6 of “MPC8641 D Integrated Host Processor Family Reference Manual”). If a computer system supplier provides a system that supports using ASMP on an 8641D PowerPC processor, a hardware change is needed to enable the “low memory offset mode.” However, if users prefer running SMP mode, a hardware change is needed to remove “low memory offset mode.”
Accordingly, when system suppliers build a system using processors such as the 8641D, a hardware change is needed to configure the system to run Linux in either ASMP or SMP mode before the system is shipped. This may not provide enough flexibility for users, who may want to run the same system under either mode depending on their application requirements. However, if a supplier wants to support both SMP and ASMP after shipping such systems, then a hardware change will be needed on the field, making support of both modes expensive and difficult.